package com.divemotor.ventarepuestosinternet.model;

import java.io.InputStream;
import java.io.Serializable;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinColumns;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

@Entity
@Table (schema="REPUESTOS" ,name = "REP_MOV_IMAGEN")
public class Imagen implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy=GenerationType.SEQUENCE , generator="SEQ_REP_MOV_IMAGEN")
	@SequenceGenerator(name = "SEQ_REP_MOV_IMAGEN", sequenceName = "REPUESTOS.SEQ_REP_MOV_IMAGEN", allocationSize = 0)
	@Column(name="NUM_ID_IMAGEN")
	private Integer idImagen;
	
	@Transient
	private InputStream archivo;
	
	@ManyToOne
	@JoinColumns({@JoinColumn(name = "COD_MODELO_FABRICA", referencedColumnName = "COD_MODELO_FABRICA", insertable = true, updatable = true),
				@JoinColumn(name = "COD_MARCA", referencedColumnName = "COD_MARCA", insertable = true, updatable = true),
				@JoinColumn(name = "COD_TIPO_COMPONENTE", referencedColumnName = "COD_TIPO_COMPONENTE", insertable = true, updatable = true)})
	private ModeloFabrica modeloFabrica;
	
	@ManyToOne
	@JoinColumn(name = "COD_ID_SUBGRUPO" , referencedColumnName = "COD_ID_SUBGRUPO")
	private SubGrupo subGrupo;
	
	@Column(name="NUM_ORDEN")
	private Integer orden;
	
	@Column(name = "TXT_NOMBRE_ARCHIVO" , length = 15)
	private String nombreArchivo;
	
	@Column(name = "TXT_TIPO" , length = 3)
	private String tipo;

	@Column(name = "IND_ESTADO", length=1)
	private String estado;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_CREACION",referencedColumnName="COD_ID_USUARIO" )
	private Usuario usuarioCreacion;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_MODIFICACION",referencedColumnName="COD_ID_USUARIO")
	private Usuario usuarioModificacion;
	
	@ManyToOne(fetch=FetchType.LAZY)
	@JoinColumn(name="COD_ID_USUARIO_ELIMINACION",referencedColumnName="COD_ID_USUARIO")
	private Usuario usuarioEliminacion;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "fec_creacion")
	private Date fechaCreacion;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "fec_modificacion")
	private Date fechaModificacion;
	
	@Temporal(TemporalType.DATE)
	@Column(name = "fec_eliminacion")
	private Date fechaEliminacion;
	
	/*** Constructores ***/
	
	public Imagen() {
		
	}

	public Imagen(Integer orden, String nombreArchivo) {
		this.orden = orden;
		this.nombreArchivo = nombreArchivo;
	}

	/*** Getters & Setters ***/
	
	public Integer getIdImagen() {
		return idImagen;
	}

	public void setIdImagen(Integer idImagen) {
		this.idImagen = idImagen;
	}

	public InputStream getArchivo() {
		return archivo;
	}

	public void setArchivo(InputStream archivo) {
		this.archivo = archivo;
	}

	public ModeloFabrica getModeloFabrica() {
		return modeloFabrica;
	}

	public void setModeloFabrica(ModeloFabrica modeloFabrica) {
		this.modeloFabrica = modeloFabrica;
	}

	public SubGrupo getSubGrupo() {
		return subGrupo;
	}

	public void setSubGrupo(SubGrupo subGrupo) {
		this.subGrupo = subGrupo;
	}

	public Integer getOrden() {
		return orden;
	}

	public void setOrden(Integer orden) {
		this.orden = orden;
	}

	public String getNombreArchivo() {
		return nombreArchivo;
	}

	public void setNombreArchivo(String nombreArchivo) {
		this.nombreArchivo = nombreArchivo;
	}

	public String getTipo() {
		return tipo;
	}

	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	public String getEstado() {
		return estado;
	}

	public void setEstado(String estado) {
		this.estado = estado;
	}

	public Usuario getUsuarioCreacion() {
		return usuarioCreacion;
	}

	public void setUsuarioCreacion(Usuario usuarioCreacion) {
		this.usuarioCreacion = usuarioCreacion;
	}

	public Usuario getUsuarioModificacion() {
		return usuarioModificacion;
	}

	public void setUsuarioModificacion(Usuario usuarioModificacion) {
		this.usuarioModificacion = usuarioModificacion;
	}

	public Usuario getUsuarioEliminacion() {
		return usuarioEliminacion;
	}

	public void setUsuarioEliminacion(Usuario usuarioEliminacion) {
		this.usuarioEliminacion = usuarioEliminacion;
	}

	public Date getFechaCreacion() {
		return fechaCreacion;
	}

	public void setFechaCreacion(Date fechaCreacion) {
		this.fechaCreacion = fechaCreacion;
	}

	public Date getFechaModificacion() {
		return fechaModificacion;
	}

	public void setFechaModificacion(Date fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public Date getFechaEliminacion() {
		return fechaEliminacion;
	}

	public void setFechaEliminacion(Date fechaEliminacion) {
		this.fechaEliminacion = fechaEliminacion;
	}
	
}
